home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / dl_serie / news / 188 / hugo / xfsl / xfsl.h < prev    next >
C/C++ Source or Header  |  1995-11-25  |  13KB  |  274 lines

  1. /*  @(#)xfsl.h, Dirk Haun/Stefan Rogel/Christoph Zwerschke, 21.07.1995
  2.  *  @(#)Aufruf eines systemweiten Fontselektors über den Cookie 'xFSL'
  3.  *
  4.  *  Revision 4 vom 21.07.1995
  5.  *
  6.  */
  7.  
  8. #if !defined(__xFSL__)
  9. #define __xFSL__
  10.  
  11. #if !defined(__AES__)
  12. # include <aes.h>
  13. #endif
  14.  
  15. #if !defined(__VDI__)
  16. # include <vdi.h>
  17. #endif
  18.  
  19. #define xFSL_REVISION  4
  20.  
  21.  
  22. /******** verwendete Strukturen ******************************************/
  23.  
  24. /*  Neuer Typ für Fontgröße in 1/65536 Punkt, gültig ab Speedo 4.0
  25.  *
  26.  *  typedef long  fix31;
  27.  */
  28.  
  29. /*  Angabe der Fontgröße,
  30.  *  wird über ein Kontrollflag (s.u.) unterschieden
  31.  */
  32.  
  33. union fsize
  34. {
  35.  int           size;         /* Fontgröße in Punkt */
  36.  fix31         size31;       /* Fontgröße in 1/65536 Punkt */
  37. };
  38.  
  39.  
  40. /*  allgemeine Fontinfo-Struktur
  41.  */
  42.  
  43. typedef struct
  44. {
  45.  int           fontid;       /* ID des Fonts                             */
  46.  int           fonttype;     /* Typ des Fonts, siehe vqt_info()          */
  47.  char         *fontname;     /* Name des Fonts, siehe vqt_name()         */
  48.  union fsize   fontsize;     /* Fontgröße in pt oder fix31               */
  49.  union fsize   fontwidth;    /* Breite in pt oder fix31                  */
  50.  char          trackkern;    /* Track-Kerning, siehe vst_kern()          */
  51.  char          pairkern;     /* Paar-Kerning, siehe vst_kern()           */
  52.  int           fontattr;     /* Attribute, siehe vst_attributes()        */
  53.  int           fontskew;     /* Neigung, siehe vst_skew()                */
  54.  int           fontcol;      /* Farbe, siehe vst_color()                 */
  55.  int           backcol;      /* Text-Hintergrundfarbe                    */
  56.  int           halign;       /* horizontale Textausrichtung              */
  57.  int           valign;       /* vertikale Textausrichtung                */
  58.  int           rotation;     /* Textrotation in 1/10 Grad                */
  59.  int           validtype;    /* Typ (V_CHAR_...) oder Mapping (MAP_...)  */
  60.  int          *validchars;   /* benötigte Zeichen oder 0L                */
  61. } PFONTINFO;
  62.  
  63.  
  64. /*  ein Eintrag im Popup
  65.  */
  66.  
  67. typedef struct
  68. {
  69.  char         *entry;        /* Text des Popup-Eintrags                  */
  70.  PFONTINFO    *fontinfo;     /* Zeiger auf Fontinfo-Struktur             */
  71.  unsigned int  fontflags;    /* erlaubte Fontarten                       */
  72.  long          funcflags;    /* Funktionsflags, nur für HuGo!            */
  73. } xFSL_PENTRY;
  74.  
  75.  
  76. /*  xFSL-Parameter
  77.  */
  78.  
  79. typedef struct
  80. {
  81.  int           par_size;     /* Größe der xFSL_PAR-Struktur selbst       */
  82.  int           pfi_size;     /* Größe der PFONTINFO-Struktur             */
  83.  unsigned long control;      /* Kontroll-Flags, s.u.                     */
  84.  const char   *headline;     /* Überschrift oder 0L                      */
  85.  const char   *example;      /* Beispieltext oder 0L                     */
  86.  const char   *helptext;     /* Text für den Hilfe-Button oder 0L        */
  87.  PFONTINFO    *font;         /* Zeiger auf Fontinfo, s.o.                */
  88.  unsigned int  fontflags;    /* erlaubte Fontarten                       */
  89.  const char   *poptext;      /* Text vor dem Popup (nur Calvino) oder 0L */
  90.  int           num_entries;  /* Anzahl der Einträge (0..n)               */
  91.  int           sel_entry;    /* Selektierter Eintrag (0..n-1)            */
  92.  xFSL_PENTRY  *popup;        /* Zeiger auf ein Popup oder 0L             */
  93.  char         *helpinfo;     /* Rückgabe: Zeiger auf Hilfedatei & -seite */
  94. } xFSL_PAR;
  95.  
  96.  
  97.  
  98. /******** Definition der Schnittstellen-Funktionen ***********************/
  99. /*
  100.  *  xFSL_INPUT xfsl_input    - vereinfachter Aufruf
  101.  *  xFSL_INIT xfsl_init      - Init-Aufruf : Dialog darstellen
  102.  *  xFSL_EVENT xfsl_event    - Event-Aufruf: Hauptschleife
  103.  *  xFSL_EXIT xfsl_exit      - Exit-Aufruf : Dialog abmelden
  104.  *
  105.  */
  106.  
  107. typedef int cdecl (*xFSL_INPUT)
  108. (
  109.  int           vdihandle,    /* Handle einer geöffneten VDI-Workstation  */
  110.  unsigned int  fontflags,    /* Flags, welche Fonts angeboten werden     */
  111.  const char   *headline,     /* Überschrift oder 0L (Default-Text)       */
  112.  int          *id,           /* Rückgabe: ID des gewählten Fonts         */
  113.  int          *size          /* Rückgabe: Größe des gewählten Fonts      */
  114. );
  115.  
  116. typedef int cdecl (*xFSL_INIT)
  117. (
  118.  int           vdihandle,    /* Handle einer geöffneten VDI-Workstation  */
  119.  xFSL_PAR     *xpar          /* Struktur mit weiteren Eingabeparametern  */
  120. );
  121.  
  122. typedef int cdecl (*xFSL_EVENT)
  123. (
  124.  int           xfsl_handle,  /* Handle von xfsl_init()                   */
  125.  EVENT        *event         /* Pure-C-Event-Struktur                    */
  126. );
  127.  
  128. typedef void cdecl (*xFSL_EXIT)
  129. (
  130.  int           xfsl_handle   /* Handle von xfsl_init()                   */
  131. );
  132.  
  133. typedef long cdecl (*xFSL_INFO)
  134. (
  135.  void                        /* keine Parameter                          */
  136. );
  137.  
  138.  
  139. /******** xFSL-Struktur **************************************************/
  140.  
  141. /*  Der Cookie 'xFSL' zeigt auf die folgende Struktur
  142.  */
  143.  
  144. typedef struct
  145. {
  146.  unsigned long xfsl;         /* Magic 'xFSL'                             */
  147.  unsigned int  revision;     /* Revisionsnummer der Schnittstelle        */
  148.  unsigned long product;      /* Kennung des Fontselektors, z.B. 'CLVN'   */
  149.  unsigned int  version;      /* Version des Fontselektors als BCD        */
  150.  xFSL_INPUT    xfsl_input;   /* einfacher Aufruf                         */
  151.  xFSL_INIT     xfsl_init;    /* Init-Aufruf                              */
  152.  xFSL_EVENT    xfsl_event;   /* Event-Aufruf                             */
  153.  xFSL_EXIT     xfsl_exit;    /* Exit-Aufruf                              */
  154.  xFSL_INFO     xfsl_info;    /* Info-Aufruf (Features abfragen)          */
  155. } xFSL;
  156.  
  157.  
  158. /******** Flags **********************************************************/
  159.  
  160. /*  Fontflags
  161.  */
  162.  
  163. #define FF_SYSTEM       0x0001 /* Systemfont (zusätzlich) anzeigen       */
  164. #define FF_MONOSPACED   0x0002 /* monospaced Fonts anzeigen              */
  165. #define FF_PROPORTIONAL 0x0004 /* prop. Fonts anzeigen                   */
  166. #define FF_BITMAP       0x0008 /* alle Bitmapfonts anzeigen              */
  167. #define FF_SPD          0x0010 /* Speedofonts                            */
  168. #define FF_TTF          0x0020 /* TrueType-Fonts                         */
  169. #define FF_PFB          0x0040 /* Type-1-Fonts                           */
  170. #define FF_CFN          0x0080 /* Calamus-Fonts (nicht implementiert!)   */
  171. #define FF_VECTOR      (FF_SPD|FF_TTF|FF_PFB|FF_CFN) /* Vektorfonts anz. */
  172. #define FF_ALL         (FF_MONOSPACED|FF_PROPORTIONAL|FF_VECTOR|FF_BITMAP)
  173. #define FF_CHANGED      0x8000 /* Änderung erfolgt (im Popup)            */
  174.  
  175. #define FF_VEKTOR       FF_VECTOR
  176. #define FF_MONO         FF_MONOSPACED
  177. #define FF_PROP         FF_PROPORTIONAL
  178.  
  179. /* Kontroll-Flags (werden nicht alle von allen Selektoren unterstützt)   */
  180. #define CC_WINDOW     0x0001 /* Fontselektor als Fenster                 */
  181. #define CC_APPMODAL   0x0002 /* Fontselektor ist applikations-modal      */
  182. #define CC_FIX31      0x0004 /* alle Größenangaben in 1/65536 Point      */
  183. #define CC_FAKESTYLE  0x0008 /* Schnitte simulieren (nur f. Bitmapfonts) */
  184. #define CC_CLOSER     0x0010 /* Fenster mit Closer, kein OK-Button       */
  185. #define CC_NOSIZE     0x0100 /* Größe nicht ändern                       */
  186. #define CC_NOCOLOR    0x0200 /* Farbe nicht ändern                       */
  187. #define CC_NOATTR     0x0400 /* Attribute nicht ändern                   */
  188. #define CC_NOWIDTH    0x0800 /* Breite nicht ändern                      */
  189. #define CC_NOKERN     0x1000 /* Kerning nicht ändern                     */
  190. #define CC_NOSKEW     0x2000 /* Skewing nicht ändern                     */
  191. #define CC_NOALIGN    0x4000 /* Ausrichtung nicht ändern                 */
  192. #define CC_NOROTATION 0x8000 /* Textrotation nicht ändern                */
  193. #define CC_DFLTSIZE  0x10000 /* Schriftgröße "Default"                   */
  194. #define CC_INVSTYLE  0x20000 /* Attribut "Invers"                        */
  195.  
  196. /* horizontale Textausrichtung (wie bei vst_alignment)                   */
  197. #define THA_LEFT          0  /* linksbündig                              */
  198. #define THA_CENTER        1  /* zentriert                                */
  199. #define THA_RIGHT         2  /* rechtsbündig                             */
  200.  
  201. /* vertikale Textausrichtung (_nicht_ wie bei vst_alignment!)            */
  202. #define TVA_BOTTOM        0  /* an der Text-Unterkante                   */
  203. #define TVA_CENTER        1  /* vertikal zentriert                       */
  204. #define TVA_TOP           2  /* an der Text-Oberkante                    */
  205.  
  206. /* Gruppen von erwünschten Zeichen im Font ('validtype' in PFONTINFO)    */
  207. #define V_CHAR_IND       -1  /* "egal"                                   */
  208. #define V_CHAR_ASC       -2  /* alle druckbaren ASCII-Zeichen (32-126)   */
  209. #define V_CHAR_PRT       -3  /* alle druckbaren Zeichen (32-255)         */
  210. #define V_CHAR_ALL       -4  /* wirklich alle Zeichen (0-255)            */
  211.  
  212. /* Mapping (ebenfalls für 'validtype' in PFONTINFO)                      */
  213. #define MAP_DIRECT        0  /* "direktes" Mapping (alle Zeichen)        */
  214. #define MAP_ASCII         1  /* ASCII-Mapping, Bereich 0..255 (Default)  */
  215.  
  216. /* Fonttypen (erweitertes vqt_name ab SpeedoGDOS 5.0c/NVDI 3)            */
  217. #define UNKNOWN_FONT 0x0000  /* Fonttyp unbekannt                        */
  218. #define BITMAP_FONT  0x0001  /* Bitmapfont                               */
  219. #define SPEEDO_FONT  0x0002  /* Speedofont                               */
  220. #define TT_FONT      0x0004  /* TrueType-Font                            */
  221. #define PFB_FONT     0x0008  /* Type-1-Font (Postscript)                 */
  222. #define CFN_FONT     0x0010  /* Calamus-Font (nicht implementiert!)      */
  223. #define ANY_FONT     0x00FF  /* als Maske (Hibyte ausmaskieren)          */
  224.  
  225.  
  226. /*  Featureflags für xfsl_info
  227.  */
  228. #define XF_SIZE      0x0001  /* Größenänderung möglich                   */
  229. #define XF_COLOR     0x0002  /* Farbänderung möglich                     */
  230. #define XF_ATTR      0x0004  /* Attributänderung möglich                 */
  231. #define XF_WIDTH     0x0008  /* Breitenänderung möglich                  */
  232. #define XF_KERN      0x0010  /* Kerningänderung möglich                  */
  233. #define XF_SKEW      0x0020  /* Neigungsänderung möglich                 */
  234. #define XF_ALIGN     0x0040  /* Änderung der Ausrichtung möglich         */
  235. #define XF_ROTATION  0x0080  /* Textrotation möglich                     */
  236. #define XF_FIX31     0x0100  /* fix31-Unterstützung                      */
  237. #define XF_POPUP     0x0200  /* Popup-Unterstützung                      */
  238. #define XF_DRAGDROP  0x0400  /* Drag&Drop-Unterstützung                  */
  239. #define XF_MAPPING   0x0800  /* beherrscht Mapping                       */
  240.  
  241.  
  242. /*  Returncodes der xfsl_xxx-Aufrufe
  243.  *  (aufwärtskompatibel zu den UFSL-Rückgabewerten [markiert mit 'U'])
  244.  */
  245.  
  246. #define xFS_PARERROR     -9  /* Parameterfehler, z.B. Aufruf nach Rev. 3 */
  247. #define xFS_LOADERROR    -8  /* Fehler beim Nachladen des Overlays       */
  248. #define xFS_RES_ERROR    -7  /* Auflösung kleiner als 640*400 Punkte     */
  249. #define xFS_NO_HANDLE    -6  /* Kein Handle frei                         */
  250. #define xFS_NO_WINDOW    -5  /* Kein Fenster frei                        */
  251. #define xFS_NO_FONTS     -4  /* Keine Fonts geladen                    U */
  252. #define xFS_NO_FONTSIZE  -3  /* Fontgröße nicht identifizierbar        U */
  253. #define xFS_ACTIVE       -2  /* Fontselektor ist bereits aktiv         U */
  254. #define xFS_ERROR        -1  /* allgemeiner Fehler (Speichermangel)    U */
  255. #define xFS_STOP          0  /* <Abbruch> gewählt                      U */
  256. #define xFS_OK            1  /* <Ok> gewählt                           U */
  257. #define xFS_HELP          2  /* Hilfe-Button angewählt                   */
  258. #define xFS_EVENT         3  /* AES-Event aufgetreten                    */
  259. #define xFS_POPUP         4  /* das User-Popup wurde angewählt           */
  260.  
  261.  
  262. /*  Schriftbreiten-Informationsstruktur,
  263.  *  wird nur für das Font-Protokoll (Nachricht XFONT_CHANGED) benötigt
  264.  */
  265.  
  266. typedef struct
  267. {
  268.   unsigned int pair  : 1;    /* Pair-Kerning (0=nein, 1=ja)              */
  269.   unsigned int track : 2;    /* Tr.-K. (0=ohne,1=norm.,2=eng,3=sehr eng) */
  270.   unsigned int width : 13;   /* Schriftbreite in pt (0..8191)            */
  271. } FW_INFO;
  272.  
  273. #endif
  274.